#include <iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;

const int N=100010;
int e[N],ne[N],h[N];
int idx=0;


void add(int a,int b)
{
    e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}

int d[N];
void bfs()
{
    queue<int>q;
    bool st[N]={false};
    
    memset(d,0x3f,sizeof d);
    q.push(1);
    d[1] = 0; // 起点到自身的距离为 0
    st[1]=true;
    while(!q.empty())
    {
        int cur=q.front();
        q.pop();
        
        for(int i=h[cur];i!=-1;i=ne[i])
        {
            if(!st[e[i]]) //一定要区分这个i和e[i],折在这了
            {
                d[e[i]]=d[cur]+1;
                q.push(e[i]);
                st[e[i]]=true;
            }
        }
    }
    
}

int main()
{
   int n,m;
   cin>>n>>m;
   memset(h,-1,sizeof h);
   while(m--)
   {
     int a,b;
     cin>>a>>b;
     add(a,b);//邻接图存储
   }
   bfs();
   cout << (d[n] == 0x3f3f3f3f ? -1 : d[n]);//如果到n号节点的距离不是无穷大，输出距离，如果是无穷大，输出-1.
   return 0;
}
